找传奇、传世资源到传世资源站!

Delphi7开发指南(英文版)

8.5玩家评分(1人评分)
下载后可评
介绍 评论 失效链接反馈

【例子介绍】

【相关图片】

from clipboard

【源码结构】

Chapter 1
Introduction 1-1
What’s in this manual? . . . . . . . . . . . . . . 1-1
Manual conventions . . . . . . . . . . . . . . . . 1-2
Developer support services . . . . . . . . . . . . 1-3
Part I
Programming with Delphi
Chapter 2
Developing applications with Delphi 2-1
Integrated development environment . . . . . . 2-1
Designing applications . . . . . . . . . . . . . . 2-2
Creating projects . . . . . . . . . . . . . . . . . . 2-3
Editing code . . . . . . . . . . . . . . . . . . . . 2-4
Compiling applications . . . . . . . . . . . . . . 2-4
Debugging applications . . . . . . . . . . . . . . 2-5
Deploying applications . . . . . . . . . . . . . . 2-5
Chapter 3
Using the component library 3-1
Understanding the component library . . . . . 3-1
Properties, methods, and events . . . . . . . 3-3
Properties . . . . . . . . . . . . . . . . . . 3-3
Methods . . . . . . . . . . . . . . . . . . 3-4
Events . . . . . . . . . . . . . . . . . . . . 3-4
User events . . . . . . . . . . . . . . . . . 3-4
System events . . . . . . . . . . . . . . . 3-4
Internal events . . . . . . . . . . . . . . . 3-4
Objects, components, and controls. . . . . . . . 3-5
TObject branch . . . . . . . . . . . . . . . . . 3-6
TPersistent branch . . . . . . . . . . . . . . . 3-7
TComponent branch . . . . . . . . . . . . . . 3-7
TControl branch . . . . . . . . . . . . . . . . 3-9
TWinControl/TWidgetControl branch . . .3-10
Chapter 4
Using the object model 4-1
What is an object? . . . . . . . . . . . . . . . . . 4-1
Examining a Delphi object . . . . . . . . . . 4-2
Changing the name of a component . . . . . 4-4
Inheriting data and code from an object. . . . . 4-5
Scope and qualifiers . . . . . . . . . . . . . . . . 4-5
Private, protected, public, and published
declarations . . . . . . . . . . . . . . . . . . 4-6
Using object variables . . . . . . . . . . . . . . 4-7
Creating, instantiating, and destroying
objects . . . . . . . . . . . . . . . . . . . . . . 4-8
Components and ownership . . . . . . . . . 4-9
Defining new classes . . . . . . . . . . . . . . . 4-9
Using interfaces . . . . . . . . . . . . . . . . . . 4-12
Using interfaces across the hierarchy . . . . 4-13
Using interfaces with procedures . . . . . . 4-14
Implementing IInterface . . . . . . . . . . . 4-14
TInterfacedObject . . . . . . . . . . . . . . . 4-15
Using the as operator with interfaces . . . . 4-16
Reusing code and delegation. . . . . . . . . 4-16
Using implements for delegation . . . . 4-17
Aggregation . . . . . . . . . . . . . . . . 4-18
Memory management of interface
objects. . . . . . . . . . . . . . . . . . . . . 4-18
Using reference counting . . . . . . . . 4-19
Not using reference counting . . . . . . 4-20
Using interfaces in distributed
applications . . . . . . . . . . . . . . . . . 4-21
Chapter 5
Using BaseCLX 5-1
Using streams . . . . . . . . . . . . . . . . . . . 5-2
Using streams to read or write data . . . . . 5-2
Stream methods for reading
and writing . . . . . . . . . . . . . . . 5-2
Reading and writing components . . . 5-3
Reading and writing strings . . . . . . . 5-3
Copying data from one stream
to another. . . . . . . . . . . . . . . . . . . 5-4
Specifying the stream position and size. . . 5-4
Seeking to a specific position . . . . . . 5-4
Using Position and Size properties . . . 5-5
Working with files . . . . . . . . . . . . . . . . 5-5
Approaches to file I/O . . . . . . . . . . . . 5-6
Using file streams . . . . . . . . . . . . . . . 5-6
Creating and opening files using
file streams . . . . . . . . . . . . . . . 5-7
Using the file handle . . . . . . . . . . . 5-8
Manipulating files . . . . . . . . . . . . . . . 5-8
Deleting a file . . . . . . . . . . . . . . . 5-8
Finding a file . . . . . . . . . . . . . . . 5-8
Renaming a file . . . . . . . . . . . . . . 5-10
File date-time routines . . . . . . . . . . 5-10
Copying a file . . . . . . . . . . . . . . . 5-11
Contents
iv
Working with ini files and the system
Registry . . . . . . . . . . . . . . . . . . . . . 5-11
Using TIniFile and TMemIniFile . . . . 5-12
Using TRegistryIniFile . . . . . . . . . 5-13
Using TRegistry . . . . . . . . . . . . . 5-13
Working with lists . . . . . . . . . . . . . . . . 5-14
Common list operations . . . . . . . . . . . 5-15
Adding list items . . . . . . . . . . . . 5-15
Deleting list items . . . . . . . . . . . . 5-15
Accessing list items . . . . . . . . . . . 5-16
Rearranging list items . . . . . . . . . . 5-16
Persistent lists. . . . . . . . . . . . . . . . . 5-16
Working with string lists . . . . . . . . . . . . 5-17
Loading and saving string lists . . . . . . . 5-17
Creating a new string list . . . . . . . . . . 5-18
Short-term string lists . . . . . . . . . . 5-18
Long-term string lists . . . . . . . . . . 5-18
Manipulating strings in a list . . . . . . . . 5-20
Counting the strings in a list . . . . . . 5-20
Accessing a particular string . . . . . . 5-20
Locating items in a string list . . . . . . 5-20
Iterating through strings in a list . . . . 5-20
Adding a string to a list . . . . . . . . . 5-21
Moving a string within a list . . . . . . 5-21
Deleting a string from a list . . . . . . . 5-21
Associating objects with a
string list . . . . . . . . . . . . . . . . 5-22
Working with strings . . . . . . . . . . . . . . 5-22
Wide character routines . . . . . . . . . . . 5-22
Commonly used long string routines . . . 5-23
Commonly used routines for
null-terminated strings. . . . . . . . . . . 5-26
Declaring and initializing strings. . . . . . 5-27
Mixing and converting string types . . . . 5-28
String to PChar conversions. . . . . . . . . 5-28
String dependencies . . . . . . . . . . . 5-29
Returning a PChar local variable . . . 5-29
Passing a local variable as
a PChar . . . . . . . . . . . . . . . . . 5-29
Compiler directives for strings . . . . . . . 5-30
Creating drawing spaces . . . . . . . . . . . . 5-31
Printing . . . . . . . . . . . . . . . . . . . . . . 5-32
Converting measurements . . . . . . . . . . . 5-33
Performing conversions . . . . . . . . . . . 5-33
Performing simple conversions . . . . 5-33
Performing complex conversions . . . 5-33
Adding new measurement types . . . . . . 5-34
Creating a simple conversion family
and adding units. . . . . . . . . . . . . . . 5-34
Declare variables . . . . . . . . . . . . . 5-35
Register the conversion family . . . . . 5-35
Register measurement units . . . . . . . 5-35
Use the new units . . . . . . . . . . . . . 5-35
Using a conversion function . . . . . . . . . 5-36
Declare variables . . . . . . . . . . . . . 5-36
Register the conversion family . . . . . 5-36
Register the base unit . . . . . . . . . . 5-36
Write methods to convert to and
from the base unit . . . . . . . . . . . . 5-36
Register the other units . . . . . . . . . 5-37
Use the new units . . . . . . . . . . . . . 5-37
Using a class to manage conversions . . . . 5-37
Creating the conversion class . . . . . . 5-38
Declare variables . . . . . . . . . . . . . 5-39
Register the conversion family and
the other units . . . . . . . . . . . . . . 5-39
Use the new units . . . . . . . . . . . . . 5-40
Defining custom variants . . . . . . . . . . . . 5-40
Storing a custom variant type’s data . . . . 5-41
Creating a class to enable the
custom variant type . . . . . . . . . . . . . 5-42
Enabling casting . . . . . . . . . . . . . 5-42
Implementing binary operations . . . . 5-44
Implementing comparison
operations . . . . . . . . . . . . . . . . 5-46
Implementing unary operations . . . . 5-47
Copying and clearing custom variants . . . 5-48
Loading and saving custom
variant values . . . . . . . . . . . . . . 5-49
Using the TCustomVariantType
descendant . . . . . . . . . . . . . . . . 5-50
Writing utilities to work with a
custom variant type . . . . . . . . . . . . . 5-50
Supporting properties and methods
in custom variants . . . . . . . . . . . . . . 5-51
Using TInvokeableVariantType . . . . . 5-51
Using TPublishableVariantType . . . . 5-53
Chapter 6
Working with components 6-1
Setting component properties . . . . . . . . . . 6-2
Setting properties at design time . . . . . . 6-2
Using property editors . . . . . . . . . . 6-3
Setting properties at runtime. . . . . . . . . 6-3
Calling methods. . . . . . . . . . . . . . . . . . 6-3
v
Working with events and event handlers . . . . 6-3
Generating a new event handler . . . . . . . 6-4
Generating a handler for a
component’s default event . . . . . . . . . 6-4
Locating event handlers . . . . . . . . . . . . 6-4
Associating an event with an existing
event handler . . . . . . . . . . . . . . . . . 6-5
Using the Sender parameter . . . . . . . 6-5
Displaying and coding shared
events . . . . . . . . . . . . . . . . . . . 6-5
Associating menu events with
event handlers . . . . . . . . . . . . . . . . 6-6
Deleting event handlers . . . . . . . . . . . . 6-6
Cross-platform and non-cross-platform
components . . . . . . . . . . . . . . . . . . . . 6-7
Adding custom components to the
Component palette . . . . . . . . . . . . . . 6-9
Chapter 7
Working with controls 7-1
Implementing drag and drop in controls . . . . 7-1
Starting a drag operation . . . . . . . . . . . 7-1
Accepting dragged items . . . . . . . . . . . 7-2
Dropping items . . . . . . . . . . . . . . . . . 7-3
Ending a drag operation. . . . . . . . . . . . 7-3
Customizing drag and drop with
a drag object. . . . . . . . . . . . . . . . . . 7-3
Changing the drag mouse pointer . . . . . . 7-4
Implementing drag and dock in controls . . . . 7-4
Making a windowed control a
docking site . . . . . . . . . . . . . . . . . . 7-4
Making a control a dockable child . . . . . . 7-5
Controlling how child controls
are docked . . . . . . . . . . . . . . . . . . . 7-5
Controlling how child controls
are undocked . . . . . . . . . . . . . . . . . 7-6
Controlling how child controls respond
to drag-and-dock operations . . . . . . . . 7-6
Working with text in controls. . . . . . . . . . . 7-6
Setting text alignment . . . . . . . . . . . . . 7-7
Adding scroll bars at runtime. . . . . . . . . 7-7
Adding the clipboard object. . . . . . . . . . 7-8
Selecting text . . . . . . . . . . . . . . . . . . 7-9
Selecting all text . . . . . . . . . . . . . . . . 7-9
Cutting, copying, and pasting text . . . . . 7-10
Deleting selected text . . . . . . . . . . . . 7-10
Disabling menu items . . . . . . . . . . . . 7-11
Providing a pop-up menu . . . . . . . . . . 7-11
Handling the OnPopup event. . . . . . . . 7-12
Adding graphics to controls . . . . . . . . . . . 7-13
Indicating that a control is
owner-drawn. . . . . . . . . . . . . . . . . 7-13
Adding graphical objects to
a string list . . . . . . . . . . . . . . . . . . 7-14
Adding images to an application . . . . 7-14
Adding images to a string list . . . . . . 7-14
Drawing owner-drawn items . . . . . . 7-15
Sizing owner-draw items . . . . . . . . . . . 7-16
Drawing owner-draw items . . . . . . . . . 7-17
Chapter 8
Building applications, components,
and libraries 8-1
Creating applications . . . . . . . . . . . . . . . 8-1
GUI applications. . . . . . . . . . . . . . . . 8-2
User interface models . . . . . . . . . . 8-2
SDI applications . . . . . . . . . . . . . 8-2
MDI applications . . . . . . . . . . . . . 8-2
Setting IDE, project, and compiler
options . . . . . . . . . . . . . . . . . . 8-3
Programming templates . . . . . . . . . . . 8-3
Console applications . . . . . . . . . . . . . 8-4
Service applications . . . . . . . . . . . . . . 8-5
Service threads . . . . . . . . . . . . . . 8-8
Service name properties . . . . . . . . . 8-9
Debugging service applications . . . . . 8-10
Creating packages and DLLs . . . . . . . . . . 8-11
When to use packages and DLLs . . . . . . 8-11
Writing database applications . . . . . . . . . . 8-12
Distributing database applications . . . . . 8-13
Creating Web server applications . . . . . . . . 8-13
Creating Web Broker applications . . . . . . 8-14
Creating WebSnap applications . . . . . . . 8-15
Creating Web Services applications . . . . . 8-15
Writing applications using COM . . . . . . . . 8-16
Using COM and DCOM . . . . . . . . . . . 8-16
Using MTS and COM  . . . . . . . . . . . . 8-16
Using data modules . . . . . . . . . . . . . . . 8-17
Creating and editing standard data
modules. . . . . . . . . . . . . . . . . . . . 8-17
Naming a data module and
its unit file . . . . . . . . . . . . . . . . 8-18
Placing and naming components . . . . 8-19
Using component properties and
events in a data module . . . . . . . . 8-19
Creating business rules in a
data module . . . . . . . . . . . . . . . 8-20
vi
Accessing a data module from a form . . . 8-20
Adding a remote data module to an
application server project . . . . . . . . . 8-21
Using the Object Repository . . . . . . . . . . 8-21
Sharing items within a project . . . . . . . 8-21
Adding items to the Object
Repository . . . . . . . . . . . . . . . . . . 8-22
Sharing objects in a team
environment. . . . . . . . . . . . . . . . . 8-22
Using an Object Repository item in
a project . . . . . . . . . . . . . . . . . . . 8-22
Copying an item . . . . . . . . . . . . . 8-22
Inheriting an item . . . . . . . . . . . . 8-23
Using an item . . . . . . . . . . . . . . 8-23
Using project templates . . . . . . . . . . . 8-23
Modifying shared items . . . . . . . . . . . 8-23
Specifying a default project, new form,
and main form . . . . . . . . . . . . . . . 8-24
Enabling Help in applications . . . . . . . . . 8-24
Help system interfaces. . . . . . . . . . . . 8-25
Implementing ICustomHelpViewer . . . . 8-25
Communicating with the Help
Manager . . . . . . . . . . . . . . . . . . . 8-26
Asking the Help Manager for
information . . . . . . . . . . . . . . . . . 8-26
Displaying keyword-based Help . . . . . . 8-27
Displaying tables of contents . . . . . . . . 8-28
Implementing IExtendedHelpViewer . . . 8-28
Implementing IHelpSelector . . . . . . . . 8-29
Registering Help system objects . . . . . . 8-30
Registering Help viewers . . . . . . . . 8-30
Registering Help selectors . . . . . . . 8-30
Using Help in a VCL application. . . . . . . . 8-31
How TApplication processes
VCL Help . . . . . . . . . . . . . . . . . . 8-31
How VCL controls process Help . . . . . . 8-31
Using Help in a CLX application. . . . . . . . 8-32
How TApplication processes
CLX Help . . . . . . . . . . . . . . . . . . 8-32
How CLX controls process Help . . . . . . 8-32
Calling a Help system directly . . . . . . . . . 8-33
Using IHelpSystem . . . . . . . . . . . . . . . 8-33
Customizing the IDE Help system . . . . . . . 8-34
Chapter 9
Developing the application
user interface 9-1
Controlling application behavior . . . . . . . . 9-1
Working at the application level . . . . . . . 9-2
Handling the screen. . . . . . . . . . . . . . 9-2
Setting up forms. . . . . . . . . . . . . . . . . . 9-3
Using the main form . . . . . . . . . . . . . 9-3
Hiding the main form. . . . . . . . . . . . . 9-3
Adding forms . . . . . . . . . . . . . . . . . 9-4
Linking forms . . . . . . . . . . . . . . . 9-4
Avoiding circular unit references . . . . 9-4
Managing layout . . . . . . . . . . . . . . . 9-5
Using forms . . . . . . . . . . . . . . . . . . . . 9-6
Controlling when forms reside
in memory . . . . . . . . . . . . . . . . . . 9-6
Displaying an auto-created form . . . . 9-6
Creating forms dynamically . . . . . . . 9-7
Creating modeless forms such
as windows . . . . . . . . . . . . . . . 9-8
Creating a form instance using
a local variable . . . . . . . . . . . . . 9-8
Passing additional arguments to forms . . . 9-8
Retrieving data from forms. . . . . . . . . . 9-9
Retrieving data from modeless
forms . . . . . . . . . . . . . . . . . . . 9-9
Retrieving data from modal forms . . . 9-11
Reusing components and groups of
components . . . . . . . . . . . . . . . . . . . 9-13
Creating and using component
templates . . . . . . . . . . . . . . . . . . . . . 9-13
Working with frames . . . . . . . . . . . . . . . 9-14
Creating frames . . . . . . . . . . . . . . . . 9-14
Adding frames to the Component
palette. . . . . . . . . . . . . . . . . . . . . 9-15
Using and modifying frames. . . . . . . . . 9-15
Sharing frames. . . . . . . . . . . . . . . . . 9-16
Developing dialog boxes . . . . . . . . . . . . . 9-17
Using open dialog boxes . . . . . . . . . . . 9-17
Organizing actions for toolbars
and menus . . . . . . . . . . . . . . . . . . . . 9-18
What is an action? . . . . . . . . . . . . . . . 9-19
Setting up action bands . . . . . . . . . . . . 9-20
vii
Creating toolbars and menus . . . . . . . . 9-20
Adding color, patterns, or pictures
to menus, buttons, and toolbars . . . 9-22
Adding icons to menus and
toolbars . . . . . . . . . . . . . . . . . 9-22
Selecting menu and toolbar styles . . . 9-23
Creating dynamic menus . . . . . . . . 9-24
Creating toolbars and menus that
users can customize . . . . . . . . . . 9-24
Hiding unused items and categories
in action bands . . . . . . . . . . . . . 9-24
Creating most recently used
(MRU) lists . . . . . . . . . . . . . . . 9-25
Using action lists . . . . . . . . . . . . . . . . . 9-26
Setting up action lists . . . . . . . . . . . . 9-26
What happens when an action fires . . . . 9-27
Responding with events . . . . . . . . 9-27
How actions find their targets . . . . . 9-29
Updating actions . . . . . . . . . . . . . . . 9-29
Predefined action classes . . . . . . . . . . 9-30
Writing action components . . . . . . . . . 9-31
Registering actions . . . . . . . . . . . . . . 9-31
Creating and managing menus. . . . . . . . . 9-32
Opening the Menu Designer . . . . . . . . 9-33
Building menus. . . . . . . . . . . . . . . . 9-34
Naming menus . . . . . . . . . . . . . 9-34
Naming the menu items . . . . . . . . 9-34
Adding, inserting, and deleting
menu items . . . . . . . . . . . . . . . 9-35
Adding separator bars . . . . . . . . . 9-36
Specifying accelerator keys and
keyboard shortcuts . . . . . . . . . . 9-36
Creating submenus. . . . . . . . . . . . . . 9-37
Creating submenus by demoting
existing menus . . . . . . . . . . . . . 9-37
Moving menu items . . . . . . . . . . . 9-38
Adding images to menu items . . . . . 9-38
Viewing the menu . . . . . . . . . . . . 9-39
Editing menu items in the Object
Inspector. . . . . . . . . . . . . . . . . . . 9-39
Using the Menu Designer context
menu . . . . . . . . . . . . . . . . . . . . . 9-40
Commands on the context menu . . . 9-40
Switching between menus at
design time . . . . . . . . . . . . . . . 9-41
Using menu templates . . . . . . . . . . . . 9-41
Saving a menu as a template . . . . . . . . 9-43
Naming conventions for template
menu items and event handlers . . . 9-44
Manipulating menu items at runtime . . . . 9-44
Merging menus . . . . . . . . . . . . . . . . 9-44
Specifying the active menu: Menu
property . . . . . . . . . . . . . . . . . 9-45
Determining the order of merged menu
items: GroupIndex property . . . . . . 9-45
Importing resource files . . . . . . . . . . . 9-45
Designing toolbars and cool bars . . . . . . . . 9-46
Adding a toolbar using a panel
component . . . . . . . . . . . . . . . . . . 9-47
Adding a speed button to a panel . . . 9-47
Assigning a speed button’s glyph . . . 9-48
Setting the initial condition of a
speed button . . . . . . . . . . . . . . . 9-48
Creating a group of speed buttons . . . 9-48
Allowing toggle buttons . . . . . . . . . 9-49
Adding a toolbar using the toolbar
component . . . . . . . . . . . . . . . . . . 9-49
Adding a tool button . . . . . . . . . . . 9-49
Assigning images to tool buttons . . . . 9-50
Setting tool button appearance and
initial conditions . . . . . . . . . . . . 9-50
Creating groups of tool buttons . . . . . 9-51
Allowing toggled tool buttons . . . . . 9-51
Adding a cool bar component . . . . . . . . 9-51
Setting the appearance of the
cool bar . . . . . . . . . . . . . . . . . . 9-52
Responding to clicks . . . . . . . . . . . . . 9-52
Assigning a menu to a tool button . . . 9-52
Adding hidden toolbars . . . . . . . . . . . 9-53
Hiding and showing toolbars . . . . . . . . 9-53
Demo programs . . . . . . . . . . . . . . . . 9-53
Common controls and XP themes. . . . . . . . 9-54
Chapter 10
Types of controls 10-1
Text controls . . . . . . . . . . . . . . . . . . . . 10-1
Edit controls . . . . . . . . . . . . . . . . . . 10-1
Memo and rich edit controls . . . . . . 10-2
Text viewing controls . . . . . . . . . . . . . 10-3
Labels . . . . . . . . . . . . . . . . . . . . . . 10-3
Specialized input controls . . . . . . . . . . . . 10-4
Scroll bars . . . . . . . . . . . . . . . . . . . 10-4
Track bars. . . . . . . . . . . . . . . . . . . . 10-5
Up-down controls . . . . . . . . . . . . . . . 10-5
Spin edit controls (CLX only) . . . . . . . . 10-5
Hot key controls (VCL only) . . . . . . . . . 10-6
Splitter controls . . . . . . . . . . . . . . . . 10-6
viii
Buttons and similar controls . . . . . . . . . . 10-6
Button controls . . . . . . . . . . . . . . . . 10-7
Bitmap buttons . . . . . . . . . . . . . . . . 10-7
Speed buttons. . . . . . . . . . . . . . . . . 10-8
Check boxes. . . . . . . . . . . . . . . . . . 10-8
Radio buttons . . . . . . . . . . . . . . . . . 10-8
Toolbars . . . . . . . . . . . . . . . . . . . . 10-9
Cool bars (VCL only). . . . . . . . . . . . . 10-9
List controls. . . . . . . . . . . . . . . . . . . . 10-9
List boxes and check-list boxes . . . . . . . 10-10
Combo boxes . . . . . . . . . . . . . . . . . 10-11
Tree views . . . . . . . . . . . . . . . . . . . 10-11
List views . . . . . . . . . . . . . . . . . . . 10-12
Icon views (CLX only) . . . . . . . . . . . . 10-12
Date-time pickers and month
calendars. . . . . . . . . . . . . . . . . . . 10-12
Grouping controls . . . . . . . . . . . . . . . . 10-12
Group boxes and radio groups . . . . . . . 10-13
Panels . . . . . . . . . . . . . . . . . . . . . 10-13
Scroll boxes . . . . . . . . . . . . . . . . . . 10-13
Tab controls . . . . . . . . . . . . . . . . . . 10-14
Page controls . . . . . . . . . . . . . . . . . 10-14
Header controls. . . . . . . . . . . . . . . . 10-14
Display controls . . . . . . . . . . . . . . . . . 10-15
Status bars. . . . . . . . . . . . . . . . . . . 10-15
Progress bars . . . . . . . . . . . . . . . . . 10-15
Help and hint properties . . . . . . . . . . 10-16
Grids. . . . . . . . . . . . . . . . . . . . . . . . 10-16
Draw grids . . . . . . . . . . . . . . . . . . 10-16
String grids . . . . . . . . . . . . . . . . . . 10-16
Value list editors (VCL only) . . . . . . . . . . 10-17
Graphic controls . . . . . . . . . . . . . . . . . 10-18
Images . . . . . . . . . . . . . . . . . . . . . 10-18
Shapes . . . . . . . . . . . . . . . . . . . . . 10-18
Bevels . . . . . . . . . . . . . . . . . . . . . 10-18
Paint boxes . . . . . . . . . . . . . . . . . . 10-19
Animation control . . . . . . . . . . . . . . 10-19
Chapter 11
Designing classes and
components with ModelMaker 11-1
ModelMaker fundamentals. . . . . . . . . . . 11-2
ModelMaker models . . . . . . . . . . . . . 11-2
Using ModelMaker with the IDE . . . . . . 11-2
Creating models . . . . . . . . . . . . . . . 11-3
Using ModelMaker views . . . . . . . . . . . . 11-4
Collections pane . . . . . . . . . . . . . . . . 11-5
Classes view . . . . . . . . . . . . . . . . 11-5
Units view . . . . . . . . . . . . . . . . . 11-5
Diagrams view . . . . . . . . . . . . . . 11-6
Members pane . . . . . . . . . . . . . . . . . 11-7
Editors pane . . . . . . . . . . . . . . . . . . 11-7
Implementation Editor . . . . . . . . . . 11-7
Unit Code Editor . . . . . . . . . . . . . 11-8
Diagram Editor . . . . . . . . . . . . . . 11-9
Other Editors . . . . . . . . . . . . . . . 11-9
For more information. . . . . . . . . . . . . . 11-10
Chapter 12
Working with graphics and
multimedia 12-1
Overview of graphics programming . . . . . . 12-1
Refreshing the screen . . . . . . . . . . . . . 12-2
Types of graphic objects . . . . . . . . . . . 12-3
Common properties and methods
of Canvas . . . . . . . . . . . . . . . . . . . 12-4
Using the properties of the Canvas
object . . . . . . . . . . . . . . . . . . . . . 12-5
Using pens . . . . . . . . . . . . . . . . 12-5
Using brushes . . . . . . . . . . . . . . . 12-8
Reading and setting pixels . . . . . . . 12-9
Using Canvas methods to draw
graphic objects . . . . . . . . . . . . . . . 12-10
Drawing lines and polylines . . . . . 12-10
Drawing shapes . . . . . . . . . . . . . 12-11
Handling multiple drawing objects
in your application . . . . . . . . . . . . 12-12
Keeping track of which drawing
tool to use . . . . . . . . . . . . . . . 12-12
Changing the tool with speed
buttons . . . . . . . . . . . . . . . . . 12-13
Using drawing tools . . . . . . . . . . 12-14
Drawing on a graphic. . . . . . . . . . . . 12-16
Making scrollable graphics . . . . . . 12-17
Adding an image control . . . . . . . 12-17
Loading and saving graphics files. . . . . 12-19
Loading a picture from a file . . . . . 12-19
Saving a picture to a file . . . . . . . . 12-20
Replacing the picture . . . . . . . . . . 12-20
ix
Using the clipboard with graphics . . . . . 12-21
Copying graphics to the
clipboard . . . . . . . . . . . . . . . . 12-22
Cutting graphics to the clipboard . . . 12-22
Pasting graphics from the
clipboard . . . . . . . . . . . . . . . . 12-23
Rubber banding example . . . . . . . . . . 12-24
Responding to the mouse . . . . . . . . 12-24
Responding to a mouse-down
action . . . . . . . . . . . . . . . . . . 12-25
Adding a field to a form object to
track mouse actions . . . . . . . . . . 12-27
Refining line drawing . . . . . . . . . . 12-28
Working with multimedia . . . . . . . . . . . 12-30
Adding silent video clips to an
application. . . . . . . . . . . . . . . . . . 12-30
Example of adding silent
video clips . . . . . . . . . . . . . . . 12-31
Adding audio and/or video clips to
an application . . . . . . . . . . . . . . . . 12-32
Example of adding audio and/or
video clips (VCL only) . . . . . . . . 12-33
Chapter 13
Writing multi-threaded applications 13-1
Defining thread objects . . . . . . . . . . . . . 13-2
Initializing the thread . . . . . . . . . . . . 13-3
Assigning a default priority . . . . . . 13-3
Indicating when threads are freed . . . 13-4
Writing the thread function . . . . . . . . . 13-4
Using the main VCL/CLX thread . . . 13-4
Using thread-local variables . . . . . . 13-6
Checking for termination by other
threads . . . . . . . . . . . . . . . . . 13-6
Handling exceptions in the thread
function . . . . . . . . . . . . . . . . . 13-6
Writing clean-up code . . . . . . . . . . . . 13-7
Coordinating threads . . . . . . . . . . . . . . 13-7
Avoiding simultaneous access . . . . . . . 13-7
Locking objects . . . . . . . . . . . . . 13-8
Using critical sections . . . . . . . . . . 13-8
Using the multi-read exclusive-write
synchronizer . . . . . . . . . . . . . . 13-8
Other techniques for sharing
memory . . . . . . . . . . . . . . . . . 13-9
Waiting for other threads . . . . . . . . . . 13-9
Waiting for a thread to finish
executing . . . . . . . . . . . . . . . . 13-10
Waiting for a task to be
completed . . . . . . . . . . . . . . . 13-10
Executing thread objects . . . . . . . . . . . . 13-12
Overriding the default priority . . . . . . 13-12
Starting and stopping threads . . . . . . . 13-12
Debugging multi-threaded applications . . . 13-13
Naming a thread. . . . . . . . . . . . . . . 13-13
Converting an unnamed thread
to a named thread . . . . . . . . . . 13-13
Assigning separate names to
similar threads . . . . . . . . . . . . 13-15
Chapter 14
Exception handling 14-1
Defining protected blocks . . . . . . . . . . . . 14-2
Writing the try block . . . . . . . . . . . . . 14-2
Raising an exception . . . . . . . . . . . 14-3
Writing exception handlers. . . . . . . . . . 14-4
Exception-handling statements . . . . . 14-4
Handling classes of exceptions . . . . . 14-6
Scope of exception handlers . . . . . . . 14-6
Reraising exceptions . . . . . . . . . . . 14-7
Writing finally blocks . . . . . . . . . . . . . 14-8
Writing a finally block . . . . . . . . . . 14-9
Handling exceptions in VCL
applications . . . . . . . . . . . . . . . . . . . 14-9
VCL exception classes . . . . . . . . . . . 14-10
Default exception handling in VCL . . . . 14-11
Silent exceptions. . . . . . . . . . . . . . . 14-12
Defining your own VCL exceptions. . . . 14-13
Chapter 15
Developing cross-platform
applications 15-1
Creating CLX applications . . . . . . . . . . . . 15-2
Porting VCL applications . . . . . . . . . . . . 15-2
Porting techniques . . . . . . . . . . . . . . 15-2
Platform-specific ports . . . . . . . . . . 15-3
Cross-platform ports . . . . . . . . . . . 15-3
Windows emulation ports . . . . . . . . 15-3
Modifying VCL applications . . . . . . . . . 15-4
WinCLX versus VisualCLX. . . . . . . . . . 15-5
What VisualCLX does differently . . . . 15-6
Features that do not port directly
or are missing . . . . . . . . . . . . . . . . 15-7
Comparing WinCLX and
VisualCLX units . . . . . . . . . . . . . . . 15-8
Differences in CLX object constructors . . 15-11
Handling system and widget events . . . 15-12
x
Writing portable code . . . . . . . . . . . . 15-12
Using conditional directives . . . . . . 15-13
Terminating conditional
directives . . . . . . . . . . . . . . . . 15-14
Including inline assembler code . . . . 15-15
Programming differences on Linux . . . . 15-16
Transferring applications between
Windows and Linux . . . . . . . . . . . . . . 15-17
Sharing source files between
Windows and Linux . . . . . . . . . . . . 15-17
Environmental differences between
Windows and Linux . . . . . . . . . . . . 15-18
Registry . . . . . . . . . . . . . . . . . . 15-20
Look and feel . . . . . . . . . . . . . . . 15-20
Directory structure on Linux . . . . . . . . 15-20
Cross-platform database applications . . . . . 15-21
dbExpress differences . . . . . . . . . . . . 15-22
Component-level differences . . . . . . . . 15-22
User interface-level differences . . . . . . . 15-23
Porting database applications
to Linux . . . . . . . . . . . . . . . . . . . 15-24
Updating data in dbExpress
applications . . . . . . . . . . . . . . . . . 15-26
Cross-platform Internet applications . . . . . 15-28
Porting Internet applications
to Linux . . . . . . . . . . . . . . . . . . . 15-28
Chapter 16
Working with packages and
components 16-1
Why use packages? . . . . . . . . . . . . . . . 16-2
Packages and standard DLLs . . . . . . . . 16-2
Runtime packages . . . . . . . . . . . . . . . . 16-3
Loading packages in an application . . . . 16-3
Loading packages with the
LoadPackage function . . . . . . . . . . 16-4
Deciding which runtime packages
to use. . . . . . . . . . . . . . . . . . . . . 16-4
Custom packages. . . . . . . . . . . . . . . 16-5
Design-time packages . . . . . . . . . . . . . . 16-5
Installing component packages . . . . . . . 16-6
Creating and editing packages . . . . . . . . . 16-7
Creating a package . . . . . . . . . . . . . . 16-7
Editing an existing package . . . . . . . . . 16-8
Understanding the structure of
a package . . . . . . . . . . . . . . . . . . 16-8
Naming packages . . . . . . . . . . . . 16-8
Requires clause . . . . . . . . . . . . . 16-9
Contains clause . . . . . . . . . . . . . 16-9
Editing package source files
manually . . . . . . . . . . . . . . . . . . 16-10
Compiling packages . . . . . . . . . . . . 16-10
Package-specific compiler
directives . . . . . . . . . . . . . . . . 16-11
Compiling and linking from the
command line . . . . . . . . . . . . . 16-13
 Package files created when
compiling . . . . . . . . . . . . . . . 16-13
Deploying packages . . . . . . . . . . . . . . 16-14
Deploying applications that use
packages . . . . . . . . . . . . . . . . . . 16-14
Distributing packages to other
developers . . . . . . . . . . . . . . . . . 16-14
Package collection files . . . . . . . . . . . 16-14
Chapter 17
Creating international applications 17-1
Internationalization and localization . . . . . . 17-1
Internationalization . . . . . . . . . . . . . . 17-1
Localization . . . . . . . . . . . . . . . . . . 17-2
Internationalizing applications . . . . . . . . . 17-2
Enabling application code . . . . . . . . . . 17-2
~Character sets . . . . . . . . . . . . . . 17-2
OEM and ANSI character sets . . . . . 17-3
Multibyte character sets . . . . . . . . . 17-3
Wide characters . . . . . . . . . . . . . . 17-4
Including bi-directional functionality
in applications . . . . . . . . . . . . . . 17-4
BiDiMode property . . . . . . . . . . . . 17-4
Locale-specific features . . . . . . . . . 17-7
Designing the user interface . . . . . . . . . 17-7
Text . . . . . . . . . . . . . . . . . . . . . 17-7
Graphic images . . . . . . . . . . . . . . 17-8
Formats and sort order . . . . . . . . . . 17-8
Keyboard mappings . . . . . . . . . . . 17-8
Isolating resources. . . . . . . . . . . . . . . 17-8
Creating resource DLLs. . . . . . . . . . . . 17-9
Using resource DLLs . . . . . . . . . . . . 17-10
Dynamic switching of resource DLLs . . . 17-11
Localizing applications. . . . . . . . . . . . . 17-12
Localizing resources. . . . . . . . . . . . . 17-12
xi
Chapter 18
Deploying applications 18-1
Deploying general applications . . . . . . . . 18-1
Using installation programs. . . . . . . . . 18-2
Identifying application files . . . . . . 18-2
Application files . . . . . . . . . . . . . 18-3
Package files . . . . . . . . . . . . . . . 18-3
Merge modules . . . . . . . . . . . . . 18-3
ActiveX controls . . . . . . . . . . . . . 18-5
Helper applications . . . . . . . . . . . 18-5
DLL locations . . . . . . . . . . . . . . 18-6
Deploying CLX applications . . . . . . . . . . 18-6
Deploying database applications. . . . . . . . 18-6
Deploying dbExpress database
applications . . . . . . . . . . . . . . . . . 18-7
Deploying BDE applications . . . . . . . . 18-8
Borland Database Engine . . . . . . . . 18-8
Deploying multi-tiered database
applications (DataSnap) . . . . . . . . . . 18-9
Deploying Web applications . . . . . . . . . . 18-9
 Deploying on Apache servers . . . . . . . 18-10
Enabling modules . . . . . . . . . . . . 18-10
CGI applications . . . . . . . . . . . . . 18-11
Programming for varying host
environments . . . . . . . . . . . . . . . . . . 18-12
Screen resolutions and color depths . . . . 18-12
Considerations when not
dynamically resizing . . . . . . . . . 18-12
Considerations when dynamically
resizing forms and controls . . . . . . 18-13
Accommodating varying
color depths . . . . . . . . . . . . . . 18-14
Fonts . . . . . . . . . . . . . . . . . . . . . . 18-14
Operating systems versions . . . . . . . . . 18-15
Software license requirements . . . . . . . . . 18-15
DEPLOY. . . . . . . . . . . . . . . . . . . . 18-15
README . . . . . . . . . . . . . . . . . . . 18-16
No-nonsense license agreement . . . . . . 18-16
Third-party product documentation . . . . 18-16
Part II
Developing database applications
Chapter 19
Designing database applications 19-1
Using databases . . . . . . . . . . . . . . . . . 19-1
Types of databases . . . . . . . . . . . . . . 19-2
Database security. . . . . . . . . . . . . . . 19-4
Transactions . . . . . . . . . . . . . . . . . . 19-4
Referential integrity, stored procedures,
and triggers. . . . . . . . . . . . . . . . . . 19-5
Database architecture. . . . . . . . . . . . . . . 19-6
General structure . . . . . . . . . . . . . . . 19-6
The user interface form . . . . . . . . . 19-6
The data module . . . . . . . . . . . . . 19-6
Connecting directly to a database
server . . . . . . . . . . . . . . . . . . . . . 19-8
Using a dedicated file on disk . . . . . . . . 19-9
Connecting to another dataset . . . . . . . 19-10
Connecting a client dataset to another
dataset in the same application . . . 19-12
Using a multi-tiered architecture . . . 19-13
Combining approaches . . . . . . . . . . . 19-14
Designing the user interface . . . . . . . . . . 19-15
Analyzing data . . . . . . . . . . . . . . . 19-15
Writing reports. . . . . . . . . . . . . . . . 19-16
Chapter 20
Using data controls 20-1
Using common data control features . . . . . . 20-2
Associating a data control with
a dataset . . . . . . . . . . . . . . . . . . . 20-3
Changing the associated dataset
at runtime . . . . . . . . . . . . . . . . 20-4
Enabling and disabling the data
source . . . . . . . . . . . . . . . . . . 20-4
Responding to changes mediated
by the data source . . . . . . . . . . . 20-4
Editing and updating data . . . . . . . . . . 20-5
Enabling editing in controls on
user entry . . . . . . . . . . . . . . . . 20-5
Editing data in a control . . . . . . . . . 20-5
Disabling and enabling data display . . . . 20-6
Refreshing data display. . . . . . . . . . . . 20-7
Enabling mouse, keyboard, and
timer events . . . . . . . . . . . . . . . . . 20-7
Choosing how to organize the data . . . . . . . 20-7
Displaying a single record . . . . . . . . . . 20-7
Displaying data as labels . . . . . . . . 20-8
Displaying and editing fields in
an edit box . . . . . . . . . . . . . . . . 20-8
Displaying and editing text in a
memo control . . . . . . . . . . . . . . 20-9
Displaying and editing text in a rich
edit memo control . . . . . . . . . . . 20-9
Displaying and editing graphics
fields in an image control . . . . . . 20-10
xii
Displaying and editing data in list
and combo boxes . . . . . . . . . . . 20-10
Handling Boolean field values
with check boxes . . . . . . . . . . . . 20-13
Restricting field values with
radio controls . . . . . . . . . . . . . . 20-14
Displaying multiple records. . . . . . . . . 20-14
Viewing and editing data with TDBGrid . . . 20-15
Using a grid control in its default
state . . . . . . . . . . . . . . . . . . . . . 20-16
Creating a customized grid . . . . . . . . . 20-17
Understanding persistent
columns . . . . . . . . . . . . . . . . . 20-17
Creating persistent columns . . . . . . 20-18
Deleting persistent columns . . . . . . 20-19
Arranging the order of persistent
columns . . . . . . . . . . . . . . . . . 20-19
Setting column properties at
design time . . . . . . . . . . . . . . . 20-20
Defining a lookup list column . . . . . 20-21
Putting a button in a column . . . . . . 20-22
Restoring default values to
a column . . . . . . . . . . . . . . . . 20-22
Displaying ADT and array fields . . . . . . 20-22
Setting grid options . . . . . . . . . . . . . 20-24
Editing in the grid . . . . . . . . . . . . . . 20-26
Controlling grid drawing . . . . . . . . . . 20-26
Responding to user actions
at runtime . . . . . . . . . . . . . . . . . . 20-27
Creating a grid that contains other
data-aware controls . . . . . . . . . . . . . . 20-28
Navigating and manipulating records. . . . . 20-29
Choosing navigator buttons to
display . . . . . . . . . . . . . . . . . . . . 20-30
Hiding and showing navigator
buttons at design time . . . . . . . . . 20-30
Hiding and showing navigator
buttons at runtime . . . . . . . . . . . 20-31
Displaying fly-over help. . . . . . . . . . . 20-31
Using a single navigator for multiple
datasets . . . . . . . . . . . . . . . . . . . 20-32
Chapter 21
Creating reports with Rave Reports 21-1
Overview . . . . . . . . . . . . . . . . . . . . . 21-1
Getting started . . . . . . . . . . . . . . . . . . 21-2
The Rave Visual Designer. . . . . . . . . . . . 21-3
Component overview . . . . . . . . . . . . . . 21-4
VCL/CLX components . . . . . . . . . . . . 21-4
Engine components . . . . . . . . . . . 21-4
Render components . . . . . . . . . . . 21-4
Data connection components . . . . . . 21-4
Rave project component . . . . . . . . . 21-5
Reporting components . . . . . . . . . . . . 21-5
Project components . . . . . . . . . . . . 21-5
Data objects . . . . . . . . . . . . . . . . 21-5
Standard components . . . . . . . . . . 21-5
Drawing components . . . . . . . . . . 21-5
Report components . . . . . . . . . . . . 21-6
Bar code components . . . . . . . . . . 21-6
Getting more information . . . . . . . . . . . . 21-6
Chapter 22
Using decision support
components 22-1
Overview . . . . . . . . . . . . . . . . . . . . . 22-1
About crosstabs . . . . . . . . . . . . . . . . . . 22-2
One-dimensional crosstabs. . . . . . . . . . 22-3
Multidimensional crosstabs . . . . . . . . . 22-3
Guidelines for using decision support
components . . . . . . . . . . . . . . . . . . . 22-4
Using datasets with decision support
components . . . . . . . . . . . . . . . . . . . 22-5
Creating decision datasets with
TQuery or TTable . . . . . . . . . . . . . . 22-6
Creating decision datasets with the
Decision Query editor. . . . . . . . . . . . 22-6
Using decision cubes . . . . . . . . . . . . . . . 22-7
Decision cube properties and events . . . . 22-7
Using the Decision Cube editor . . . . . . . 22-8
Viewing and changing dimension
settings . . . . . . . . . . . . . . . . . . 22-8
Setting the maximum available
dimensions and summaries . . . . . . 22-9
Viewing and changing design
options . . . . . . . . . . . . . . . . . . 22-9
Using decision sources . . . . . . . . . . . . . . 22-9
Properties and events . . . . . . . . . . . . . 22-9
Using decision pivots. . . . . . . . . . . . . . 22-10
Decision pivot properties. . . . . . . . . . 22-10
Creating and using decision grids . . . . . . 22-11
Creating decision grids . . . . . . . . . . . 22-11
Using decision grids . . . . . . . . . . . . 22-11
Opening and closing decision
grid fields . . . . . . . . . . . . . . . 22-11
xiii
Reorganizing rows and columns in
decision grids . . . . . . . . . . . . . 22-12
Drilling down for detail in
decision grids . . . . . . . . . . . . . 22-12
Limiting dimension selection in
decision grids . . . . . . . . . . . . . 22-12
Decision grid properties . . . . . . . . . . . 22-12
Creating and using decision graphs . . . . . . 22-13
Creating decision graphs . . . . . . . . . . 22-13
Using decision graphs . . . . . . . . . . . . 22-14
The decision graph display . . . . . . . . . 22-15
Customizing decision graphs . . . . . . . . 22-16
Setting decision graph template
defaults . . . . . . . . . . . . . . . . . 22-17
Customizing decision graph
series . . . . . . . . . . . . . . . . . . 22-18
Decision support components at
runtime . . . . . . . . . . . . . . . . . . . . . 22-19
Decision pivots at runtime . . . . . . . . . 22-19
Decision grids at runtime . . . . . . . . . . 22-19
Decision graphs at runtime . . . . . . . . . 22-20
Decision support components and
memory control . . . . . . . . . . . . . . . . 22-20
Setting maximum dimensions,
summaries, and cells . . . . . . . . . . . . 22-20
Setting dimension state . . . . . . . . . . . 22-21
Using paged dimensions . . . . . . . . . . 22-21
Chapter 23
Connecting to databases 23-1
Using implicit connections . . . . . . . . . . . 23-2
Controlling connections . . . . . . . . . . . . . 23-3
Connecting to a database server . . . . . . 23-3
Disconnecting from a database server . . . 23-4
Controlling server login . . . . . . . . . . . . . 23-4
Managing transactions . . . . . . . . . . . . . 23-6
Starting a transaction . . . . . . . . . . . . 23-7
Ending a transaction . . . . . . . . . . . . . 23-8
Ending a successful transaction . . . . 23-8
Ending an unsuccessful
transaction . . . . . . . . . . . . . . . 23-9
Specifying the transaction
isolation level . . . . . . . . . . . . . . . . 23-9
Sending commands to the server . . . . . . . 23-10
Working with associated datasets . . . . . . . 23-12
Closing all datasets without
disconnecting from the server. . . . . . . 23-12
Iterating through the associated
datasets . . . . . . . . . . . . . . . . . . . 23-13
Obtaining metadata. . . . . . . . . . . . . . . 23-13
Listing available tables . . . . . . . . . . . 23-14
Listing the fields in a table . . . . . . . . . 23-14
Listing available stored procedures . . . . 23-14
Listing available indexes . . . . . . . . . . 23-14
Listing stored procedure parameters . . . 23-15
Chapter 24
Understanding datasets 24-1
Using TDataSet descendants . . . . . . . . . . 24-2
Determining dataset states. . . . . . . . . . . . 24-3
Opening and closing datasets . . . . . . . . . . 24-4
Navigating datasets. . . . . . . . . . . . . . . . 24-5
Using the First and Last methods . . . . . . 24-6
Using the Next and Prior methods . . . . . 24-7
Using the MoveBy method. . . . . . . . . . 24-7
Using the Eof and Bof properties . . . . . . 24-8
Eof . . . . . . . . . . . . . . . . . . . . . 24-8
Bof . . . . . . . . . . . . . . . . . . . . . 24-9
Marking and returning to records . . . . . . 24-9
The Bookmark property . . . . . . . . . 24-9
The GetBookmark method . . . . . . 24-10
The GotoBookmark and
BookmarkValid methods . . . . . . . 24-10
The CompareBookmarks method . . 24-10
The FreeBookmark method . . . . . . 24-10
A bookmarking example . . . . . . . 24-10
Searching datasets . . . . . . . . . . . . . . . 24-11
Using Locate . . . . . . . . . . . . . . . . . 24-11
Using Lookup . . . . . . . . . . . . . . . . 24-12
Displaying and editing a subset of data
using filters . . . . . . . . . . . . . . . . . . 24-13
Enabling and disabling filtering . . . . . . 24-13
Creating filters . . . . . . . . . . . . . . . . 24-13
Setting the Filter property . . . . . . . 24-14
Writing an OnFilterRecord
event handler . . . . . . . . . . . . . 24-15
Switching filter event handlers
at runtime . . . . . . . . . . . . . . . 24-16
Setting filter options. . . . . . . . . . . . . 24-16
Navigating records in a filtered
dataset . . . . . . . . . . . . . . . . . . . 24-16
Modifying data . . . . . . . . . . . . . . . . . 24-17
Editing records. . . . . . . . . . . . . . . . 24-18
Adding new records . . . . . . . . . . . . 24-19
Inserting records . . . . . . . . . . . . 24-19
Appending records . . . . . . . . . . . 24-20
Deleting records . . . . . . . . . . . . . . . 24-20
Posting data . . . . . . . . . . . . . . . . . 24-21
xiv
Canceling changes . . . . . . . . . . . . . . 24-21
Modifying entire records . . . . . . . . . . 24-22
Calculating fields . . . . . . . . . . . . . . . . 24-23
Types of datasets . . . . . . . . . . . . . . . . . 24-24
Using table type datasets . . . . . . . . . . . . 24-25
Advantages of using table type
datasets . . . . . . . . . . . . . . . . . . . 24-26
Sorting records with indexes . . . . . . . . 24-26
Obtaining information about
indexes . . . . . . . . . . . . . . . . . 24-27
Specifying an index with
IndexName . . . . . . . . . . . . . . . 24-27
Creating an index with
IndexFieldNames . . . . . . . . . . . 24-28
Using Indexes to search for records . . . . 24-28
Executing a search with Goto
methods . . . . . . . . . . . . . . . . . 24-29
Executing a search with Find
methods . . . . . . . . . . . . . . . . . 24-30
Specifying the current record after
a successful search . . . . . . . . . . . 24-30
Searching on partial keys . . . . . . . . 24-30
Repeating or extending a search . . . . 24-30
Limiting records with ranges . . . . . . . . 24-31
Understanding the differences
between ranges and filters . . . . . . 24-31
Specifying ranges . . . . . . . . . . . . 24-31
Modifying a range . . . . . . . . . . . . 24-34
Applying or canceling a range . . . . . 24-34
Creating master/detail relationships. . . . 24-35
Making the table a detail of
another dataset . . . . . . . . . . . . . 24-35
Using nested detail tables . . . . . . . 24-37
Controlling Read/write access
to tables . . . . . . . . . . . . . . . . . . . 24-38
Creating and deleting tables . . . . . . . . 24-38
Creating tables . . . . . . . . . . . . . . 24-38
Deleting tables . . . . . . . . . . . . . . 24-41
Emptying tables . . . . . . . . . . . . . . . 24-41
Synchronizing tables . . . . . . . . . . . . . 24-42
Using query-type datasets . . . . . . . . . . . 24-42
Specifying the query . . . . . . . . . . . . . 24-43
Specifying a query using the
SQL property . . . . . . . . . . . . . . 24-44
Specifying a query using the
CommandText property . . . . . . . 24-44
Using parameters in queries . . . . . . . . 24-45
Supplying parameters at design
time . . . . . . . . . . . . . . . . . . . 24-45
Supplying parameters at runtime . . 24-47
Establishing master/detail relationships
using parameters . . . . . . . . . . . . . 24-47
Preparing queries . . . . . . . . . . . . . . 24-48
Executing queries that don’t return
a result set . . . . . . . . . . . . . . . . . 24-49
Using unidirectional result sets . . . . . . 24-49
Using stored procedure-type datasets . . . . 24-50
Working with stored procedure
parameters . . . . . . . . . . . . . . . . . 24-51
Setting up parameters at
design time . . . . . . . . . . . . . . 24-52
Using parameters at runtime . . . . . 24-54
Preparing stored procedures . . . . . . . . 24-55
Executing stored procedures that don’t
return a result set . . . . . . . . . . . . . 24-55
Fetching multiple result sets . . . . . . . . 24-56
Chapter 25
Working with field components 25-1
Dynamic field components . . . . . . . . . . . 25-2
Persistent field components . . . . . . . . . . . 25-3
Creating persistent fields . . . . . . . . . . . 25-4
Arranging persistent fields . . . . . . . . . . 25-5
Defining new persistent fields . . . . . . . . 25-5
Defining a data field . . . . . . . . . . . 25-6
Defining a calculated field . . . . . . . . 25-7
Programming a calculated field . . . . . 25-8
Defining a lookup field . . . . . . . . . 25-9
Defining an aggregate field . . . . . . 25-10
Deleting persistent field components . . . 25-11
Setting persistent field properties
and events . . . . . . . . . . . . . . . . . 25-11
Setting display and edit properties
at design time . . . . . . . . . . . . . 25-11
Setting field component properties
at runtime . . . . . . . . . . . . . . . 25-13
Creating attribute sets for field
components . . . . . . . . . . . . . . 25-13
Associating attribute sets with field
components . . . . . . . . . . . . . . 25-14
Removing attribute associations . . . 25-14
Controlling and masking
user input . . . . . . . . . . . . . . . 25-15
xv
Using default formatting for numeric,
date, and time fields . . . . . . . . . . 25-15
Handling events . . . . . . . . . . . . . 25-16
Working with field component methods
at runtime . . . . . . . . . . . . . . . . . . . . 25-17
Displaying, converting, and accessing
field values . . . . . . . . . . . . . . . . . . . 25-18
Displaying field component values in
standard controls . . . . . . . . . . . . . . 25-18
Converting field values . . . . . . . . . . . 25-19
Accessing field values with the default
dataset property . . . . . . . . . . . . . . 25-20
Accessing field values with a dataset’s
Fields property . . . . . . . . . . . . . . . 25-21
Accessing field values with a dataset’s
FieldByName method . . . . . . . . . . . 25-21
Setting a default value for a field. . . . . . . . 25-22
Working with constraints . . . . . . . . . . . . 25-22
Creating a custom constraint . . . . . . . . 25-22
Using server constraints . . . . . . . . . . . 25-23
Using object fields . . . . . . . . . . . . . . . . 25-23
Displaying ADT and array fields . . . . . . 25-24
Working with ADT fields . . . . . . . . . . 25-25
Using persistent field
components . . . . . . . . . . . . . . 25-25
Using the dataset’s FieldByName
method . . . . . . . . . . . . . . . . . 25-25
Using the dateset’s FieldValues
property . . . . . . . . . . . . . . . . . 25-25
Using the ADT field’s FieldValues
property . . . . . . . . . . . . . . . . . 25-26
Using the ADT field’s Fields
property . . . . . . . . . . . . . . . . . 25-26
Working with array fields . . . . . . . . . . 25-26
Using persistent fields . . . . . . . . . 25-26
Using the array field’s FieldValues
property . . . . . . . . . . . . . . . . . 25-27
Using the array field’s Fields
property . . . . . . . . . . . . . . . . . 25-27
Working with dataset fields . . . . . . . . . 25-27
Displaying dataset fields . . . . . . . . 25-27
Accessing data in a nested dataset . . . 25-28
Working with reference fields. . . . . . . . 25-28
Displaying reference fields . . . . . . . 25-28
Accessing data in a reference field . . . 25-29
Chapter 26
Using the Borland Database Engine 26-1
BDE-based architecture. . . . . . . . . . . . . . 26-1
Using BDE-enabled datasets . . . . . . . . . 26-2
Associating a dataset with database
and session connections . . . . . . . . 26-3
Caching BLOBs . . . . . . . . . . . . . . 26-4
Obtaining a BDE handle . . . . . . . . . 26-4
Using TTable . . . . . . . . . . . . . . . . . . 26-5
Specifying the table type for local
tables . . . . . . . . . . . . . . . . . . . 26-5
Controlling read/write access to
local tables . . . . . . . . . . . . . . . . 26-6
Specifying a dBASE index file . . . . . . 26-6
Renaming local tables . . . . . . . . . . 26-8
Importing data from another table . . . 26-8
Using TQuery . . . . . . . . . . . . . . . . . 26-9
Creating heterogeneous queries . . . . 26-9
Obtaining an editable result set . . . . 26-10
Updating read-only result sets . . . . 26-11
Using TStoredProc . . . . . . . . . . . . . 26-11
Binding parameters . . . . . . . . . . 26-12
Working with Oracle overloaded
stored procedures . . . . . . . . . . . 26-12
Connecting to databases with
TDatabase . . . . . . . . . . . . . . . . . 26-12
Associating a database component
with a session . . . . . . . . . . . . . 26-13
Understanding database and session
component interactions . . . . . . . 26-13
Identifying the database . . . . . . . . 26-14
Opening a connection using
TDatabase . . . . . . . . . . . . . . . 26-15
Using database components in data
modules . . . . . . . . . . . . . . . . 26-16
Managing database sessions . . . . . . . . 26-16
Activating a session . . . . . . . . . . 26-18
Specifying default database
connection behavior . . . . . . . . . 26-18
Managing database connections . . . 26-19
Working with password-protected
Paradox and dBASE tables . . . . . 26-21
Specifying Paradox directory
locations . . . . . . . . . . . . . . . . 26-24
Working with BDE aliases . . . . . . . 26-25
Retrieving information about
a session . . . . . . . . . . . . . . . . 26-27
xvi
Creating additional sessions . . . . . . 26-28
Naming a session . . . . . . . . . . . . 26-29
Managing multiple sessions . . . . . . 26-29
Using transactions with the BDE. . . . . . . . 26-31
Using passthrough SQL . . . . . . . . . . . 26-32
Using local transactions . . . . . . . . . . . 26-32
Using the BDE to cache updates . . . . . . . . 26-33
Enabling BDE-based cached updates . . . 26-34
Applying BDE-based cached updates . . . 26-35
Applying cached updates using
a database . . . . . . . . . . . . . . . . 26-36
Applying cached updates with dataset
component methods . . . . . . . . . . 26-36
Creating an OnUpdateRecord
event handler . . . . . . . . . . . . . . 26-37
Handling cached update errors . . . . 26-38
Using update objects to update
a dataset . . . . . . . . . . . . . . . . . . . 26-40
Creating SQL statements for update
components . . . . . . . . . . . . . . 26-41
Using multiple update objects . . . . . 26-45
Executing the SQL statements . . . . . 26-46
Using TBatchMove. . . . . . . . . . . . . . . . 26-49
Creating a batch move component . . . . . 26-49
Specifying a batch move mode . . . . . . . 26-50
Appending records . . . . . . . . . . . 26-50
Updating records . . . . . . . . . . . . 26-50
Appending and updating
records . . . . . . . . . . . . . . . . . 26-51
Copying datasets . . . . . . . . . . . . 26-51
Deleting records . . . . . . . . . . . . . 26-51
Mapping data types . . . . . . . . . . . . . 26-51
Executing a batch move . . . . . . . . . . . 26-52
Handling batch move errors . . . . . . . . 26-52
The Data Dictionary . . . . . . . . . . . . . . . 26-53
Tools for working with the BDE . . . . . . . . 26-55
Chapter 27
Working with ADO components 27-1
Overview of ADO components . . . . . . . . 27-2
Connecting to ADO data stores . . . . . . . . 27-3
Connecting to a data store using
TADOConnection. . . . . . . . . . . . . . 27-3
Accessing the connection object . . . . 27-5
Fine-tuning a connection . . . . . . . . . . 27-5
Forcing asynchronous
connections . . . . . . . . . . . . . . . 27-5
Controlling time-outs . . . . . . . . . . 27-6
Indicating the types of operations
the connection supports . . . . . . . . 27-6
Specifying whether the connection
automatically initiates
transactions . . . . . . . . . . . . . . . 27-7
Accessing the connection’s
commands . . . . . . . . . . . . . . . . . . 27-7
ADO connection events. . . . . . . . . . . . 27-8
Events when establishing a
connection . . . . . . . . . . . . . . . . 27-8
Events when disconnecting . . . . . . . 27-8
Events when managing
transactions . . . . . . . . . . . . . . . 27-9
Other events . . . . . . . . . . . . . . . . 27-9
Using ADO datasets . . . . . . . . . . . . . . . 27-9
Connecting an ADO dataset to
a data store . . . . . . . . . . . . . . 27-10
Working with record sets . . . . . . . 27-11
Filtering records based on
bookmarks . . . . . . . . . . . . . . . 27-11
Fetching records asynchronously . . . 27-12
Using batch updates . . . . . . . . . . 27-13
Loading data from and saving
data to files . . . . . . . . . . . . . . 27-15
Using TADODataSet . . . . . . . . . . . . 27-16
Using Command objects . . . . . . . . . . . . 27-18
Specifying the command . . . . . . . . . . 27-18
Using the Execute method . . . . . . . . . 27-19
Canceling commands . . . . . . . . . . . . 27-19
Retrieving result sets with commands . . 27-20
Handling command parameters. . . . . . 27-20
Chapter 28
Using unidirectional datasets 28-1
Types of unidirectional datasets. . . . . . . . . 28-2
Connecting to the database server . . . . . . . 28-2
Setting up TSQLConnection . . . . . . . . . 28-3
Identifying the driver . . . . . . . . . . 28-3
Specifying connection parameters . . . 28-4
Naming a connection description . . . . 28-4
Using the Connection Editor . . . . . . 28-5
Specifying what data to display . . . . . . . . . 28-6
Representing the results of a query . . . . . 28-6
Representing the records in a table . . . . . 28-7
Representing a table using
TSQLDataSet . . . . . . . . . . . . . . 28-7
Representing a table using
TSQLTable . . . . . . . . . . . . . . . . 28-7
xvii
Representing the results of a
stored procedure . . . . . . . . . . . . . . 28-8
Fetching the data. . . . . . . . . . . . . . . . . 28-8
Preparing the dataset . . . . . . . . . . . . 28-9
Fetching multiple datasets . . . . . . . . . 28-9
Executing commands that do not
return records. . . . . . . . . . . . . . . . . . 28-10
Specifying the command to execute . . . . 28-10
Executing the command . . . . . . . . . . . 28-11
Creating and modifying server
metadata. . . . . . . . . . . . . . . . . . . 28-11
Setting up master/detail linked cursors. . . . 28-12
Accessing schema information . . . . . . . . . 28-13
Fetching metadata into a unidirectional
dataset . . . . . . . . . . . . . . . . . . . . 28-13
Fetching data after using the dataset
for metadata . . . . . . . . . . . . . . 28-14
The structure of metadata
datasets . . . . . . . . . . . . . . . . . 28-14
Debugging dbExpress applications . . . . . . 28-19
Using TSQLMonitor to monitor
SQL commands . . . . . . . . . . . . . . . 28-19
Using a callback to monitor
SQL commands . . . . . . . . . . . . . . . 28-20
Chapter 29
Using client datasets 29-1
Working with data using a client dataset . . . 29-2
Navigating data in client datasets . . . . . 29-2
Limiting what records appear. . . . . . . . 29-2
Editing data . . . . . . . . . . . . . . . . . . 29-5
Undoing changes . . . . . . . . . . . . 29-5
Saving changes . . . . . . . . . . . . . 29-6
Constraining data values . . . . . . . . . . 29-7
Specifying custom constraints . . . . . 29-7
Sorting and indexing. . . . . . . . . . . . . 29-8
Adding a new index . . . . . . . . . . . 29-8
Deleting and switching indexes . . . . 29-9
Using indexes to group data . . . . . . 29-9
Representing calculated values . . . . . . . 29-10
Using internally calculated fields
in client datasets . . . . . . . . . . . . 29-11
Using maintained aggregates . . . . . . . . 29-11
 Specifying aggregates . . . . . . . . . 29-12
Aggregating over groups of
records . . . . . . . . . . . . . . . . . 29-13
Obtaining aggregate values . . . . . . 29-14
Copying data from another dataset . . . . 29-14
Assigning data directly . . . . . . . . 29-14
Cloning a client dataset cursor . . . . 29-15
Adding application-specific information
to the data . . . . . . . . . . . . . . . . . 29-15
Using a client dataset to cache updates. . . . 29-16
Overview of using cached updates . . . . 29-17
Choosing the type of dataset for caching
updates . . . . . . . . . . . . . . . . . . . 29-18
Indicating what records are modified. . . 29-19
Updating records . . . . . . . . . . . . . . 29-20
Applying updates . . . . . . . . . . . 29-20
Intervening as updates are
applied . . . . . . . . . . . . . . . . . 29-21
Reconciling update errors . . . . . . . 29-23
Using a client dataset with a provider . . . . 29-24
Specifying a provider . . . . . . . . . . . . 29-25
Requesting data from the source dataset
or document . . . . . . . . . . . . . . . . 29-26
Incremental fetching . . . . . . . . . . 29-26
Fetch-on-demand . . . . . . . . . . . . 29-27
Getting parameters from the source
dataset . . . . . . . . . . . . . . . . . . . 29-27
Passing parameters to the source
dataset . . . . . . . . . . . . . . . . . . . 29-28
Sending query or stored procedure
parameters . . . . . . . . . . . . . . . 29-29
Limiting records with parameters . . 29-29
Handling constraints from the server . . . 29-30
Refreshing records. . . . . . . . . . . . . . 29-31
Communicating with providers using
custom events . . . . . . . . . . . . . . . 29-31
Overriding the source dataset . . . . . . . 29-32
Using a client dataset with file-based
data . . . . . . . . . . . . . . . . . . . . . . . 29-33
Creating a new dataset . . . . . . . . . . . 29-33
Loading data from a file or stream . . . . 29-34
Merging changes into data . . . . . . . . . 29-34
Saving data to a file or stream . . . . . . . 29-35
Using a simple dataset . . . . . . . . . . . . . 29-35
When to use TSimpleDataSet . . . . . . . 29-36
Setting up a simple dataset. . . . . . . . . 29-36
xviii
Chapter 30
Using provider components 30-1
Determining the source of data. . . . . . . . . 30-2
Using a dataset as the source
of the data . . . . . . . . . . . . . . . . . . 30-2
Using an XML document as the source
of the data . . . . . . . . . . . . . . . . . . 30-2
Communicating with the client dataset . . . . 30-3
Choosing how to apply updates using
a dataset provider . . . . . . . . . . . . . . . 30-4
Controlling what information is included
in data packets . . . . . . . . . . . . . . . . . 30-4
Specifying what fields appear in
data packets . . . . . . . . . . . . . . . . . 30-4
Setting options that influence the
data packets . . . . . . . . . . . . . . . . . 30-5
Adding custom information to
data packets . . . . . . . . . . . . . . . . . 30-6
Responding to client data requests. . . . . . . 30-7
Responding to client update requests . . . . . 30-8
Editing delta packets before updating
the database . . . . . . . . . . . . . . . . . 30-9
Influencing how updates are applied . . . 30-10
Screening individual updates . . . . . . . . 30-11
Resolving update errors on
the provider . . . . . . . . . . . . . . . . . 30-11
Applying updates to datasets that do
not represent a single table . . . . . . . . 30-12
Responding to client-generated events . . . . 30-12
Handling server constraints . . . . . . . . . . 30-13
Chapter 31
Creating multi-tiered applications 31-1
Advantages of the multi-tiered
database model. . . . . . . . . . . . . . . . . 31-2
Understanding multi-tiered database
applications . . . . . . . . . . . . . . . . . . . 31-2
Overview of a three-tiered application. . . 31-3
The structure of the client application . . . 31-4
The structure of the application server. . . 31-5
The contents of the remote
data module . . . . . . . . . . . . . . 31-6
Using transactional data modules . . . 31-7
Pooling remote data modules . . . . . 31-8
Choosing a connection protocol . . . . . . 31-9
Using DCOM connections . . . . . . . 31-9
Using Socket connections . . . . . . . . 31-9
Using Web connections . . . . . . . . . 31-10
Using SOAP connections . . . . . . . . 31-11
Building a multi-tiered application . . . . . . 31-11
Creating the application server . . . . . . . . 31-12
Setting up the remote data module . . . . 31-13
Configuring
TRemoteDataModule . . . . . . . . 31-13
Configuring TMTSDataModule . . . 31-15
Configuring TSoapDataModule . . . 31-16
Extending the application server’s
interface. . . . . . . . . . . . . . . . . . . 31-16
Adding callbacks to the application
server’s interface . . . . . . . . . . . 31-17
Extending a transactional application
server’s interface . . . . . . . . . . . 31-17
Managing transactions in multi-tiered
applications . . . . . . . . . . . . . . . . 31-17
Supporting master/detail
relationships . . . . . . . . . . . . . . . . 31-18
Supporting state information in remote
data modules. . . . . . . . . . . . . . . . 31-19
Using multiple remote data modules . . . 31-21
Registering the application server . . . . . . 31-22
Creating the client application. . . . . . . . . 31-22
Connecting to the application server . . . 31-23
Specifying a connection
using DCOM . . . . . . . . . . . . . 31-24
Specifying a connection
using sockets . . . . . . . . . . . . . 31-24
Specifying a connection
using HTTP . . . . . . . . . . . . . . 31-25
Specifying a connection
using SOAP . . . . . . . . . . . . . . 31-26
Brokering connections . . . . . . . . . 31-27
Managing server connections . . . . . . . 31-27
Connecting to the server . . . . . . . . 31-27
Dropping or changing a server
connection . . . . . . . . . . . . . . . 31-28
Calling server interfaces . . . . . . . . . . 31-28
Using early binding with DCOM . . . 31-29
Using dispatch interfaces with
TCP/IP or HTTP . . . . . . . . . . . 31-29
Calling the interface of a SOAP-based
server . . . . . . . . . . . . . . . . . . 31-30
Connecting to an application server that
uses multiple data modules . . . . . . . 31-30
Writing Web-based client applications . . . . 31-31
Distributing a client application as an
ActiveX control . . . . . . . . . . . . . . 31-32
Creating an Active Form for the client
application . . . . . . . . . . . . . . . 31-33
xix
Building Web applications using
InternetExpress . . . . . . . . . . . . . . . 31-33
Building an InternetExpress
application. . . . . . . . . . . . . . . . . . 31-34
Using the javascript libraries . . . . . . 31-35
Granting permission to access and
launch the application server . . . . . 31-36
Using an XML broker . . . . . . . . . . . . 31-36
Fetching XML data packets . . . . . . . 31-36
Applying updates from XML
delta packets . . . . . . . . . . . . . . 31-37
Creating Web pages with an
InternetExpress page producer . . . . . . 31-39
Using the Web page editor . . . . . . . 31-39
Setting Web item properties . . . . . . 31-40
Customizing the InternetExpress
page producer template . . . . . . . . 31-41
Chapter 32
Using XML in database
applications 32-1
Defining transformations . . . . . . . . . . . . 32-1
Mapping between XML nodes and
data packet fields . . . . . . . . . . . . . . 32-2
Using XMLMapper. . . . . . . . . . . . . . 32-4
Loading an XML schema or
data packet . . . . . . . . . . . . . . . 32-4
Defining mappings . . . . . . . . . . . 32-5
Generating transformation files . . . . 32-6
Converting XML documents into
data packets. . . . . . . . . . . . . . . . . . . 32-6
Specifying the source XML document . . . 32-6
Specifying the transformation . . . . . . . 32-7
Obtaining the resulting data packet . . . . 32-7
Converting user-defined nodes . . . . . . . 32-7
Using an XML document as the source
for a provider . . . . . . . . . . . . . . . . . . 32-8
Using an XML document as the client
of a provider . . . . . . . . . . . . . . . . . . 32-9
Fetching an XML document from
a provider . . . . . . . . . . . . . . . . . . 32-9
Applying updates from an XML
document to a provider . . . . . . . . . . 32-11
Part III
Writing Internet applications
Chapter 33
Creating Internet server
applications 33-1
About Web Broker and WebSnap . . . . . . . . 33-1
Terminology and standards . . . . . . . . . . . 33-3
Parts of a Uniform Resource Locator . . . . 33-3
URI vs. URL . . . . . . . . . . . . . . . . 33-4
HTTP request header information. . . . . . 33-4
HTTP server activity . . . . . . . . . . . . . . . 33-5
Composing client requests . . . . . . . . . . 33-5
Serving client requests . . . . . . . . . . . . 33-5
Responding to client requests . . . . . . . . 33-6
Types of Web server applications . . . . . . . . 33-6
ISAPI and NSAPI . . . . . . . . . . . . . 33-6
CGI stand-alone . . . . . . . . . . . . . 33-6
Apache . . . . . . . . . . . . . . . . . . . 33-7
Web App Debugger . . . . . . . . . . . 33-7
Converting Web server application
target types . . . . . . . . . . . . . . . . . . 33-8
Debugging server applications . . . . . . . . . 33-9
Using the Web Application Debugger . . . 33-9
Launching your application with
the Web Application Debugger . . . . 33-9
Converting your application to
another type of Web server
application . . . . . . . . . . . . . . . 33-10
Debugging Web applications
that are DLLs. . . . . . . . . . . . . . . . 33-10
User rights necessary for
DLL debugging . . . . . . . . . . . . 33-10
Chapter 34
Using Web Broker 34-1
Creating Web server applications with
Web Broker. . . . . . . . . . . . . . . . . . . . 34-1
The Web module. . . . . . . . . . . . . . . . 34-2
The Web Application object . . . . . . . . . 34-3
The structure of a Web Broker
application . . . . . . . . . . . . . . . . . . . . 34-3
The Web dispatcher. . . . . . . . . . . . . . . . 34-5
Adding actions to the dispatcher . . . . . . 34-5
Dispatching request messages . . . . . . . . 34-5
xx
Action items . . . . . . . . . . . . . . . . . . . 34-6
Determining when action items fire . . . . 34-6
The target URL . . . . . . . . . . . . . . 34-6
The request method type . . . . . . . . 34-7
Enabling and disabling action
items . . . . . . . . . . . . . . . . . . . 34-7
Choosing a default action item . . . . . 34-7
Responding to request messages with
action items . . . . . . . . . . . . . . . . . 34-8
Sending the response . . . . . . . . . . 34-8
Using multiple action items . . . . . . 34-9
Accessing client request information . . . . . 34-9
Properties that contain request header
information . . . . . . . . . . . . . . . . . 34-9
Properties that identify the target . . . 34-9
Properties that describe the
Web client . . . . . . . . . . . . . . . . 34-10
Properties that identify the purpose
of the request . . . . . . . . . . . . . . 34-10
Properties that describe the expected
response . . . . . . . . . . . . . . . . 34-10
Properties that describe the
content . . . . . . . . . . . . . . . . . 34-11
The content of HTTP request
messages. . . . . . . . . . . . . . . . . . . 34-11
Creating HTTP response messages . . . . . . 34-11
Filling in the response header. . . . . . . . 34-11
Indicating the response status . . . . . 34-12
Indicating the need for client
action . . . . . . . . . . . . . . . . . . 34-12
Describing the server application . . . 34-12
Describing the content . . . . . . . . . 34-12
Setting the response content . . . . . . . . 34-13
Sending the response . . . . . . . . . . . . 34-13
Generating the content of response
messages . . . . . . . . . . . . . . . . . . . . 34-13
Using page producer components . . . . . 34-14
HTML templates . . . . . . . . . . . . . 34-14
Specifying the HTML template . . . . 34-15
Converting HTML-transparent
tags . . . . . . . . . . . . . . . . . . . 34-16
Using page producers from an
action item . . . . . . . . . . . . . . . 34-16
Chaining page producers
together . . . . . . . . . . . . . . . . . 34-17
Using database information in
responses . . . . . . . . . . . . . . . . . . . . 34-18
Adding a session to the Web module . . . 34-18
Representing database information
in HTML . . . . . . . . . . . . . . . . . . 34-19
Using dataset page producers . . . . . 34-19
Using table producers . . . . . . . . . 34-20
Specifying the table attributes . . . . . 34-20
Specifying the row attributes . . . . . 34-20
Specifying the columns . . . . . . . . 34-20
Embedding tables in HTML
documents . . . . . . . . . . . . . . . 34-21
Setting up a dataset table
producer . . . . . . . . . . . . . . . . 34-21
Setting up a query table
producer . . . . . . . . . . . . . . . . 34-21
Chapter 35
Creating Web Server applications
using WebSnap 35-1
Fundamental WebSnap components . . . . . . 35-2
Web modules. . . . . . . . . . . . . . . . . . 35-2
Web application module types . . . . . 35-3
Web page modules . . . . . . . . . . . . 35-4
Web data modules . . . . . . . . . . . . 35-5
Adapters . . . . . . . . . . . . . . . . . . . . 35-5
Fields . . . . . . . . . . . . . . . . . . . . 35-6
Actions . . . . . . . . . . . . . . . . . . . 35-6
Errors . . . . . . . . . . . . . . . . . . . 35-6
Records . . . . . . . . . . . . . . . . . . 35-6
Page producers . . . . . . . . . . . . . . . . 35-6
Creating Web server applications
with WebSnap . . . . . . . . . . . . . . . . . . 35-7
Selecting a server type . . . . . . . . . . . . 35-8
Specifying application module
components . . . . . . . . . . . . . . . . . 35-9
Selecting Web application module
options . . . . . . . . . . . . . . . . . . . 35-10
Advanced HTML design. . . . . . . . . . . . 35-11
Manipulating server-side script in
HTML files . . . . . . . . . . . . . . . . . 35-12
Login support . . . . . . . . . . . . . . . . . . 35-13
Adding login support. . . . . . . . . . . . 35-13
Using the sessions service . . . . . . . . . 35-14
Login pages . . . . . . . . . . . . . . . . . 35-15
Setting pages to require logins . . . . . . . 35-17
User access rights . . . . . . . . . . . . . . 35-17
Dynamically displaying fields as
edit or text boxes . . . . . . . . . . . 35-18
Hiding fields and their contents . . . 35-18
Preventing page access . . . . . . . . . 35-19
xxi
Server-side scripting in WebSnap . . . . . . . 35-19
Active scripting. . . . . . . . . . . . . . . . 35-20
Script engine . . . . . . . . . . . . . . . . . 35-20
Script blocks. . . . . . . . . . . . . . . . . . 35-20
Creating script . . . . . . . . . . . . . . . . 35-21
Wizard templates . . . . . . . . . . . . 35-21
TAdapterPageProducer . . . . . . . . . 35-21
Editing and viewing script . . . . . . . . . 35-21
Including script in a page . . . . . . . . . . 35-21
Script objects . . . . . . . . . . . . . . . . . 35-22
Dispatching requests and responses . . . . . . 35-22
Dispatcher components . . . . . . . . . . . 35-23
Adapter dispatcher operation. . . . . . . . 35-23
Using adapter components to
generate content . . . . . . . . . . . . 35-23
Receiving adapter requests and
generating responses . . . . . . . . . 35-25
Image request . . . . . . . . . . . . . . 35-26
Image response . . . . . . . . . . . . . 35-27
Dispatching action items . . . . . . . . . . 35-27
Page dispatcher operation. . . . . . . . . . 35-28
Chapter 36
Creating Web server applications
using IntraWeb 36-1
Using IntraWeb components . . . . . . . . . . 36-2
Getting started with IntraWeb . . . . . . . . . 36-3
Creating a new IntraWeb application . . . 36-4
Editing the main form . . . . . . . . . . . . 36-4
Writing an event handler for
the button . . . . . . . . . . . . . . . . . . 36-5
Running the completed application . . . . 36-6
Using IntraWeb with Web Broker
and WebSnap . . . . . . . . . . . . . . . . . . 36-7
For more information . . . . . . . . . . . . . . 36-8
Chapter 37
Working with XML documents 37-1
Using the Document Object Model . . . . . . 37-2
Working with XML components . . . . . . . . 37-4
Using TXMLDocument . . . . . . . . . . . 37-4
Working with XML nodes . . . . . . . . . . 37-4
Working with a node’s value . . . . . . 37-5
Working with a node’s attributes . . . 37-5
Adding and deleting child nodes . . . 37-6
Abstracting XML documents with the
Data Binding wizard . . . . . . . . . . . . . . 37-6
Using the XML Data Binding wizard . . . . 37-8
Using code that the XML Data
Binding wizard generates. . . . . . . . . . 37-9
Chapter 38
Using Web Services 38-1
Understanding invokable interfaces . . . . . . 38-2
Using nonscalar types in invokable
interfaces . . . . . . . . . . . . . . . . . . . 38-4
Registering nonscalar types . . . . . . . 38-5
Using remotable objects . . . . . . . . . 38-6
Representing attachments . . . . . . . . 38-7
Managing the lifetime of remotable
objects . . . . . . . . . . . . . . . . . . 38-7
Remotable object example . . . . . . . . 38-7
Writing servers that support Web Services. . . 38-9
Building a Web Service server . . . . . . . . 38-9
Using the SOAP application wizard . . . 38-10
Adding new Web Services . . . . . . . . . 38-11
Editing the generated code . . . . . . 38-12
Using a different base class . . . . . . 38-12
Using the WSDL importer . . . . . . . . . 38-13
Browsing for Business services . . . . . . 38-14
Understanding UDDI . . . . . . . . . 38-15
Using the UDDI browser . . . . . . . 38-15
Defining and using SOAP headers . . . . 38-16
Defining header classes . . . . . . . . 38-16
Sending and receiving headers . . . . 38-16
Handling scalar-type headers . . . . . 38-17
Communicating the structure of your
headers to other applications . . . . 38-18
Creating custom exception classes for
Web Services . . . . . . . . . . . . . . . . 38-18
Generating WSDL documents for
a Web Service application. . . . . . . . . 38-19
Writing clients for Web Services. . . . . . . . 38-20
Importing WSDL documents . . . . . . . 38-20
Calling invokable interfaces . . . . . . . . 38-20
Obtaining an invokable interface
from the generated function . . . . . 38-21
Using a remote interfaced object . . . 38-21
Processing headers in client
applications . . . . . . . . . . . . . . . . 38-23
xxii
Chapter 39
Working with sockets 39-1
Implementing services . . . . . . . . . . . . . 39-1
Understanding service protocols . . . . . . 39-2
Communicating with
applications . . . . . . . . . . . . . . . 39-2
Services and ports . . . . . . . . . . . . . . 39-2
Types of socket connections. . . . . . . . . . . 39-3
Client connections . . . . . . . . . . . . . . 39-3
Listening connections . . . . . . . . . . . . 39-3
Server connections . . . . . . . . . . . . . . 39-3
Describing sockets . . . . . . . . . . . . . . . . 39-4
Describing the host. . . . . . . . . . . . . . 39-4
Choosing between a host name
and an IP address . . . . . . . . . . . 39-5
Using ports . . . . . . . . . . . . . . . . . . 39-5
Using socket components . . . . . . . . . . . . 39-6
Getting information about the
connection . . . . . . . . . . . . . . . . . . 39-6
Using client sockets . . . . . . . . . . . . . 39-6
Specifying the desired server . . . . . . 39-7
Forming the connection . . . . . . . . . 39-7
Getting information about the
connection . . . . . . . . . . . . . . . 39-7
Closing the connection . . . . . . . . . 39-7
Using server sockets . . . . . . . . . . . . . 39-7
Specifying the port . . . . . . . . . . . 39-8
Listening for client requests . . . . . . 39-8
Connecting to clients . . . . . . . . . . 39-8
Closing server connections . . . . . . . 39-8
Responding to socket events . . . . . . . . . . 39-8
Error events . . . . . . . . . . . . . . . . . . 39-9
Client events . . . . . . . . . . . . . . . . . 39-9
Server events . . . . . . . . . . . . . . . . . 39-9
Events when listening . . . . . . . . . . 39-9
Events with client connections . . . . . 39-10
Reading and writing over socket
connections . . . . . . . . . . . . . . . . . . . 39-10
Non-blocking connections. . . . . . . . . . 39-10
Reading and writing events . . . . . . 39-11
Blocking connections. . . . . . . . . . . . . 39-11
Part IV
Developing COM-based applications
Chapter 40
Overview of COM technologies 40-1
COM as a specification and
implementation . . . . . . . . . . . . . 40-2
COM extensions . . . . . . . . . . . . . 40-2
Parts of a COM application . . . . . . . . . . . 40-3
COM interfaces . . . . . . . . . . . . . . . . 40-3
The fundamental COM interface,
IUnknown . . . . . . . . . . . . . . . . 40-4
COM interface pointers . . . . . . . . . 40-5
COM servers . . . . . . . . . . . . . . . . . . 40-5
CoClasses and class factories . . . . . . 40-6
In-process, out-of-process, and
remote servers . . . . . . . . . . . . . . 40-7
The marshaling mechanism . . . . . . . 40-8
Aggregation . . . . . . . . . . . . . . . . 40-9
COM clients . . . . . . . . . . . . . . . . . 40-10
COM extensions. . . . . . . . . . . . . . . . . 40-10
Automation servers . . . . . . . . . . . . . 40-12
Active Server Pages . . . . . . . . . . . . . 40-13
ActiveX controls . . . . . . . . . . . . . . . 40-13
Active Documents. . . . . . . . . . . . . . 40-14
Transactional objects . . . . . . . . . . . . 40-15
Type libraries. . . . . . . . . . . . . . . . . 40-16
The content of type libraries . . . . . . 40-16
Creating type libraries . . . . . . . . . 40-17
When to use type libraries . . . . . . . 40-17
Accessing type libraries . . . . . . . . 40-18
Benefits of using type libraries . . . . 40-18
Using type library tools . . . . . . . . 40-19
Implementing COM objects
with wizards . . . . . . . . . . . . . . . . . . 40-19
Code generated by wizards . . . . . . . . 40-22
xxiii
Chapter 41
Working with type libraries 41-1
Type Library editor . . . . . . . . . . . . . . . 41-2
Parts of the Type Library editor. . . . . . . 41-3
Toolbar . . . . . . . . . . . . . . . . . . 41-3
Object list pane . . . . . . . . . . . . . . 41-5
Status bar . . . . . . . . . . . . . . . . . 41-5
Pages of type information . . . . . . . 41-6
Type library elements . . . . . . . . . . . . 41-8
Interfaces . . . . . . . . . . . . . . . . . 41-9
Dispinterfaces . . . . . . . . . . . . . . 41-9
CoClasses . . . . . . . . . . . . . . . . . 41-10
Type definitions . . . . . . . . . . . . . 41-10
Modules . . . . . . . . . . . . . . . . . 41-11
Using the Type Library editor. . . . . . . . 41-11
Valid types . . . . . . . . . . . . . . . . 41-12
Using Delphi or IDL syntax . . . . . . 41-13
Creating a new type library . . . . . . 41-19
Opening an existing type library . . . 41-20
Adding an interface to the type
library . . . . . . . . . . . . . . . . . . 41-21
Modifying an interface using the
type library . . . . . . . . . . . . . . . 41-21
Adding properties and methods to
an interface or dispinterface . . . . . 41-22
Adding a CoClass to the type
library . . . . . . . . . . . . . . . . . . 41-23
Adding an interface to a CoClass . . . 41-23
Adding an enumeration to the
type library . . . . . . . . . . . . . . . 41-24
Adding an alias to the type
library . . . . . . . . . . . . . . . . . . 41-24
Adding a record or union to the
type library . . . . . . . . . . . . . . . 41-24
Adding a module to the type
library . . . . . . . . . . . . . . . . . . 41-25
Saving and registering type library
information . . . . . . . . . . . . . . . 41-25
Apply Updates dialog . . . . . . . . . 41-26
Saving a type library . . . . . . . . . . 41-26
Refreshing the type library . . . . . . . 41-26
Registering the type library . . . . . . 41-27
Exporting an IDL file . . . . . . . . . . 41-27
Deploying type libraries . . . . . . . . . . . . 41-27
Chapter 42
Creating COM clients 42-1
Importing type library information. . . . . . . 42-2
Using the Import Type Library dialog . . . 42-3
Using the Import ActiveX dialog . . . . . . 42-4
Code generated when you import
type library information . . . . . . . . . . 42-5
Controlling an imported object . . . . . . . . . 42-6
Using component wrappers . . . . . . . . . 42-6
ActiveX wrappers . . . . . . . . . . . . 42-6
Automation object wrappers . . . . . . 42-7
Using data-aware ActiveX controls . . . . . 42-8
Example: Printing a document with
Microsoft Word . . . . . . . . . . . . . . . 42-9
Preparing Delphi for this example . . 42-10
Importing the Word type library . . . 42-10
Using a VTable or dispatch
interface object to control
Microsoft Word . . . . . . . . . . . . 42-11
Cleaning up the example . . . . . . . 42-12
Writing client code based on type
library definitions . . . . . . . . . . . . . 42-13
Connecting to a server . . . . . . . . . 42-13
Controlling an Automation server
using a dual interface . . . . . . . . 42-13
Controlling an Automation server
using a dispatch interface . . . . . . 42-14
Handling events in an automation
controller . . . . . . . . . . . . . . . . 42-14
Creating clients for servers that do not
have a type library . . . . . . . . . . . . . . 42-16
Using .NET assemblies with Delphi . . . . . 42-17
Requirements for COM
interoperability . . . . . . . . . . . . . . 42-17
.NET components and type libraries . . . 42-18
Accessing user-defined .NET
components . . . . . . . . . . . . . . . . 42-20
xxiv
Chapter 43
Creating simple COM servers 43-1
Overview of creating a COM object . . . . . . 43-2
Designing a COM object . . . . . . . . . . . . 43-2
Using the COM object wizard . . . . . . . . . 43-3
Using the Automation object wizard . . . . . 43-5
COM object instancing types . . . . . . . . 43-6
Choosing a threading model . . . . . . . . 43-6
Writing an object that supports the
free threading model . . . . . . . . . 43-8
Writing an object that supports the
apartment threading model . . . . . 43-9
Writing an object that supports the
neutral threading model . . . . . . . 43-9
Defining a COM object’s interface . . . . . . . 43-9
Adding a property to the object’s
interface . . . . . . . . . . . . . . . . . . . 43-10
Adding a method to the object’s
interface . . . . . . . . . . . . . . . . . . . 43-10
Exposing events to clients . . . . . . . . . . 43-11
Managing events in your
Automation object . . . . . . . . . . . 43-12
Automation interfaces. . . . . . . . . . . . . . 43-13
Dual interfaces . . . . . . . . . . . . . . . . 43-13
Dispatch interfaces . . . . . . . . . . . . . . 43-14
Custom interfaces . . . . . . . . . . . . . . 43-15
Marshaling data . . . . . . . . . . . . . . . . . 43-15
Automation compatible types . . . . . . . 43-16
Type restrictions for automatic
marshaling . . . . . . . . . . . . . . . . . 43-16
Custom marshaling . . . . . . . . . . . . . 43-17
Registering a COM object . . . . . . . . . . . . 43-17
Registering an in-process server . . . . . . 43-17
Registering an out-of-process server . . . . 43-17
Testing and debugging the application . . . . 43-18
Chapter 44
Creating an Active Server Page 44-1
Creating an Active Server Object. . . . . . . . 44-2
Using the ASP intrinsics . . . . . . . . . . . 44-3
Application . . . . . . . . . . . . . . . . 44-4
Request . . . . . . . . . . . . . . . . . . 44-4
Response . . . . . . . . . . . . . . . . . 44-5
Session . . . . . . . . . . . . . . . . . . 44-6
Server . . . . . . . . . . . . . . . . . . . 44-6
Creating ASPs for in-process or
out-of-process servers . . . . . . . . . . . 44-7
Registering an Active Server Object . . . . . . 44-8
Registering an in-process server . . . . . . . 44-8
Registering an out-of-process server . . . . 44-8
Testing and debugging the Active Server
Page application. . . . . . . . . . . . . . . . . 44-8
Chapter 45
Creating an ActiveX control 45-1
Overview of ActiveX control creation . . . . . 45-2
Elements of an ActiveX control . . . . . . . 45-2
VCL control . . . . . . . . . . . . . . . . 45-3
ActiveX wrapper . . . . . . . . . . . . . 45-3
Type library . . . . . . . . . . . . . . . . 45-3
Property page . . . . . . . . . . . . . . . 45-3
Designing an ActiveX control . . . . . . . . . . 45-4
Generating an ActiveX control from a
VCL control . . . . . . . . . . . . . . . . . . . 45-4
Generating an ActiveX control based on
a VCL form. . . . . . . . . . . . . . . . . . . . 45-6
Licensing ActiveX controls. . . . . . . . . . . . 45-7
Customizing the ActiveX control’s
interface . . . . . . . . . . . . . . . . . . . . . 45-8
Adding additional properties,
methods, and events . . . . . . . . . . . . 45-9
Adding properties and methods . . . . 45-9
Adding events . . . . . . . . . . . . . 45-10
Enabling simple data binding with
the type library. . . . . . . . . . . . . . . 45-11
Creating a property page for an
ActiveX control . . . . . . . . . . . . . . . . 45-12
Creating a new property page . . . . . . . 45-13
Adding controls to a property page . . . . 45-13
Associating property page controls
with ActiveX control properties . . . . . 45-13
Updating the property page . . . . . . 45-13
Updating the object . . . . . . . . . . 45-14
Connecting a property page to an
ActiveX control . . . . . . . . . . . . . . 45-14
Registering an ActiveX control . . . . . . . . 45-15
Testing an ActiveX control . . . . . . . . . . . 45-15
Deploying an ActiveX control
on the Web . . . . . . . . . . . . . . . . . . . 45-15
Setting options. . . . . . . . . . . . . . . . 45-16
xxv
Chapter 46
Creating MTS or COM  objects 46-1
Understanding transactional objects. . . . . . 46-2
Requirements for a transactional
object . . . . . . . . . . . . . . . . . . . . . 46-3
Managing resources . . . . . . . . . . . . . . . 46-3
Accessing the object context. . . . . . . . . 46-4
Just-in-time activation . . . . . . . . . . . . 46-4
Resource pooling . . . . . . . . . . . . . . . 46-5
Database resource dispensers . . . . . 46-6
Shared property manager . . . . . . . 46-6
Releasing resources . . . . . . . . . . . 46-8
Object pooling . . . . . . . . . . . . . . . . 46-8
MTS and COM  transaction support . . . . . 46-9
Transaction attributes . . . . . . . . . . . . 46-10
Setting the transaction attribute . . . . 46-11
Stateful and stateless objects . . . . . . . . 46-11
Influencing how transactions end . . . . . 46-12
Initiating transactions . . . . . . . . . . . . 46-12
Setting up a transaction object
on the client side . . . . . . . . . . . . 46-13
Setting up a transaction object on
the server side . . . . . . . . . . . . . 46-14
Transaction time-out . . . . . . . . . . . . . 46-14
Role-based security . . . . . . . . . . . . . . . 46-15
Overview of creating transactional
objects . . . . . . . . . . . . . . . . . . . . . 46-15
Using the Transactional Object wizard . . . . 46-16
Choosing a threading model for a
transactional object . . . . . . . . . . . . 46-17
Activities . . . . . . . . . . . . . . . . 46-18
Generating events under COM  . . . . . . . 46-19
Using the Event Object wizard. . . . . . . 46-21
Using the COM  Event Subscription
object wizard . . . . . . . . . . . . . . . . 46-22
Firing events using a COM  event
object . . . . . . . . . . . . . . . . . . . . 46-23
Passing object references . . . . . . . . . . . . 46-23
Using the SafeRef method . . . . . . . 46-24
Callbacks . . . . . . . . . . . . . . . . 46-25
Debugging and testing transactional
objects . . . . . . . . . . . . . . . . . . . . . 46-25
Installing transactional objects . . . . . . . . 46-26
Administering transactional objects . . . . . 46-27
Index I-1

评论

发表评论必须先登陆, 您可以 登陆 或者 注册新账号 !


在线咨询: 问题反馈
客服QQ:174666394

有问题请留言,看到后及时答复